package org.rency.common.trigger.service;

import java.text.ParseException;
import java.util.List;

import org.quartz.Trigger;
import org.rency.common.trigger.exception.DaemonSchedulerException;
import org.rency.common.utils.enums.YesNoEnum;

/**
 * 调度器服务接口
 * @author: user_rcy@163.com
 * </br>Created on 2015年11月25日
 * @version: V1.0.0
 * @since JDK 1.8
 */
public interface ScheduleService {
	
	/**
	 * 建表
	 * </br>Created on 2015年11月27日
	 */
	public void initDataBaseTable();
	
	/**
     * 获取待加载触发器
     * @throws DaemonSchedulerException
     * @return
     */
    public List<Trigger> loadEnableTriggers() throws DaemonSchedulerException;
    
    /**
     * 停止所有触发器
     * </br>Created on 2015年12月1日
     * @return
     */
    public boolean pauseAllTriggers() throws DaemonSchedulerException;
    
    /**
     * 停止触发器
     * </br>Created on 2015年12月1日
     * @return
     */
    public boolean pauseTriggers(Integer triggerId) throws DaemonSchedulerException;
    
    /**
     * 停止触发器
     * </br>Created on 2015年12月1日
     * @return
     */
    public boolean pauseTriggers(String beanName) throws DaemonSchedulerException;    
    
    /**
     * 恢复所有触发器
     * </br>Created on 2015年12月1日
     * @return
     */
    public boolean resumeAllTriggers() throws DaemonSchedulerException;
    
    /**
     * 恢复触发器
     * </br>Created on 2015年12月1日
     * @param triggerId
     * @return
     */
    public boolean resumeTriggers(Integer triggerId) throws DaemonSchedulerException;
    
    /**
     * 恢复触发器
     * </br>Created on 2015年12月1日
     * @param triggerId
     * @return
     */
    public boolean resumeTriggers(String beanName) throws DaemonSchedulerException;
    
    /**
     * 修改触发器Cron表达式
     * </br>Created on 2015年12月3日
     * @param beanName
     * @param cronExpression
     * @return
     * @throws DaemonSchedulerException
     */
    public boolean modifyCronExpression(String beanName,String cronExpression) throws DaemonSchedulerException;
    
    /**
     * 添加触发器
     * </br>Created on 2015年12月3日
     * @param beanName
     * @param description
     * @param cronExpression
     * @param concurrent 是否并发
     * @param memo
     * @return
     * @throws DaemonSchedulerException
     */
    public boolean addTrigger(String beanName,String description,String cronExpression,YesNoEnum concurrent,String memo) throws DaemonSchedulerException;
    
    /**
     * 移除触发器
     * </br>Created on 2015年12月3日
     * @param beanName
     * @return
     * @throws DaemonSchedulerException
     */
    public boolean removeTrigger(String beanName) throws DaemonSchedulerException;
    
    /**
     * 立即激活触发器
     * </br>Created on 2015年12月21日
     * @param beanName
     * @return
     * @throws DaemonSchedulerException
     */
    public boolean fireTrigger(String beanName) throws DaemonSchedulerException;
    
    /**
     * 触发器执行异常
     * </br>Created on 2015年12月10日
     * @param triggerId
     * @return
     * @throws DaemonSchedulerException
     */
    public boolean triggerException(Integer triggerId) throws DaemonSchedulerException;
    
    /**
     * 根据表达式返回最近执行计划
     * </br>Created on 2015年12月21日
     * @param cronExpression
     * @param count 返回数量
     * @return
     * @throws ParseException
     */
    public List<String> parseCronExpression(String cronExpression,int count) throws ParseException;
    
    /**
     * 队列是否启动
     * </br>Created on 2015年12月3日
     * @return
     */
    public boolean isAvailable();
    
    void setSchedulerAvailable(boolean available);
}
